出处:掘金
原作者:前端九哥
[[005.CSS 布局:Flex & Grid|CSS 布局(Flex & Grid)]]
只用两行 CSS,就能让卡片、图片、内容块自动适应各种屏幕宽度,彻底摆脱复杂的媒体查询!秘诀就是 CSS Grid 的 auto-fill 和 auto-fit
![[屏幕自适应.webp]]
假设有这样一个需求:
200px,剩余空间平均分配只需在父元素加两行 CSS 就能实现:
/* 父元素 */
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}
/* 子元素 */
.item {
height: 200px;
background-color: rgb(141, 141, 255);
border-radius: 10px;
}
grid-template-columns
repeat(auto-fit, ...)
repeat 是个重复函数,表示后面的模式会被重复多次。auto-fit 是一个特殊值,意思是:自动根据容器宽度,能放下几个就放几个,每列都用后面的规则
minmax(200px, 1fr)
minmax 也是一个函数,意思是:每列最小 200px,最大可以占 1fr(剩余空间的平分)1fr),让内容填满整行综合起来 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); 这行代码的意思就是:
auto-fill尽可能多地填充列,即使没有内容也会“占位”
auto-fit自动适应内容,能合并多余空列,不占位
假设容器宽度能容纳 10 个 200px 的卡片,但你只放了 5 个卡片:
auto-fill 会保留 10 列宽度,5 个卡片在前五列,后面五列是“空轨道”auto-fit 会折叠掉后面五列,让这 5 个卡片拉伸填满整行![[auto-fill Vs. auto-fit.webp]]
auto-fill:比如表格、日历,或者你希望网格始终对齐,即使内容不满auto-fit:适合卡片式布局、相册、响应式按钮等| 属性 | 空轨道 | 内容拉伸 | 适用场景 |
|---|---|---|---|
| auto-fill | 保留 | 否 | 固定列数、占位网格 |
| auto-fit | 折叠 | 是 | 流式布局、拉伸填充 |